//  手撕apply
function fn(eyes,nodes) {
  this.eyes = eyes
  this.nodes=nodes
}
const obj = {
  name: 'jerry',
  age:18
}

// fn.apply(obj,[1,2])

Object.prototype._apply = function () {
  const obj = arguments[0]
  if (!this instanceof Function) {
    return new Error('必须为函数')
  }
  if (!obj||typeof(obj)!=='object') {
    obj=global
  }

  const other = [...arguments].slice(1)
  obj.fn = this
  obj.fn(...other)
  delete obj.fn
}

fn._apply(obj,1,2)

// Object.prototype._apply = function () {
//   console.log(!(this instanceof Function))
//   if (!(this instanceof Function)) {
//     throw new Error('not a function') // 首先进行是否为函数的判断
//   }
//   let obj = arguments[0]
//   if (!obj instanceof Object ||!obj) {
//     obj=global // 指向window
//   }
//   obj.fn=this
//   const Parameter = Array.prototype.slice.call(arguments).splice(1)
//   const result = obj.fn(...Parameter.flat(1))
//   delete obj.fn
//   return result
// }

// obj._apply(obj, [2, 1])
// console.log(obj)